package com.itheima.utils;

import java.util.Random;

public  class  CodeUtil {
    /*
    * 需求： 定义方法实现随机产生一个5位的验证码
    * 验证码格式：
    * 1. 长度为5
    * 2. 四位字母（大小写都可）和一位数字
    * */


     public static String getCode() {
          String code = "";

         // 1.定义一个52位的空数组,用来存放大小写字母
         char[] chs = new char[52];
         // 通过循环往里面添加字母和数字
         for (int i = 0; i < chs.length; i++) {
             // ASCII码表：a对应97，A对应65
             if(i <= 25) {
                 // 添加小写字母
                 chs[i] = (char)(97 + i);
             } else {
                 // 添加大写字母
                 chs[i] = (char)(65 + i - 26);
             }
         }

         // 2.随机抽取4次
         Random r = new Random();
         for (int i = 0; i < 4; i++) {
             int randomIndex = r.nextInt(chs.length);
             code += chs[randomIndex];
         }

         // 随机抽取一个数字
         int number = r.nextInt(10);
         code += number;
         // 将字符串中的数字随意调换位置


        return Upset(code);
    }



    //字符串打乱的方法
    public static String Upset(String str){
        char[] arr = str.toCharArray();
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {   //从0索引开始打乱数组
            int index = r.nextInt(arr.length);  //形成随机索引
            char temp = arr[i];                 //中间变量
            arr[i] = arr[index];                //随机索引的数组赋值给当前循环的数组
            arr[index] = temp;                  //值互换
        }
        str = new String(arr);                  //把数组转换成字符串
        return  str;                            //返回字符串
    }

}
